package com.example.leetcode.day;

import java.util.Map;

/**
 * 给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符，并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。
 *
 * 在执行上述操作后，返回包含相同字母的最长子字符串的长度。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/longest-repeating-character-replacement
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class Day424 {

    // 滑动窗口
    public int characterReplacement(String s, int k) {
        int length = s.length();
        if (length < 2) {
            return length;
        }
        int left = 0;
        int right = 0;
        int[] count = new int[26];
        int indexCount = 0;
        int res = 0;
        while (right < length) {
            count[s.charAt(right) - 'A']++;
            indexCount = Math.max(indexCount,count[s.charAt(right) - 'A']);
            right++;
            if (right - left > indexCount + k) {
                // 说明k 不够需要左移
                count[s.charAt(left)- 'A']--;
                left++;
            }
            res = Math.max(res,right - left);
        }
        return res;
    }

    public static void main(String[] args) {
        Day424 d = new Day424();
        String s = "ABAA";
        System.out.println(d.characterReplacement(s, 0));
    }
}
